﻿package hibernate.xml44.test;



import hibernate.xml44.pojo.WebUser;
import hibernate.xml44.util.HibernateHandler;

import java.util.List;

import org.hibernate.Session;


public class Cache {
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		Session session = HibernateHandler.getCurrentSession();
		session.beginTransaction();
		/*load会先去缓存读取数据,并将将结果放入缓存*/
		WebUser webuser = (WebUser) session.load(WebUser.class, 110);
		String hql="from WebUser where id=110";
		System.out.println(webuser.getName());
		/*get也会先去缓存读取数据,并将结果放入缓存*/
		webuser = (WebUser) session.get(WebUser.class, 110);
		System.out.println(webuser.getName());
		/*list()和uniqueResult()不会去缓存读取数据,但是会放入数据*/
		List<WebUser> list = session.createQuery(hql).list();
		System.out.println(list.get(0).getName());
		webuser = (WebUser) session.createQuery(hql).uniqueResult();
		System.out.println(webuser.getName());
//		System.out.println("hit:"+HibernateHandler.getSessionFactory().getStatistics().getSecondLevelCacheHitCount());
		session.getTransaction().commit();
		/*          一级缓存(Session级)           */
		/* 缓存的作用是提高性能，可以将其理解为是一个Map
		 * 对缓存的操作有三个：存入数据，读取数据，删除数据
		 * save,update,saveOrUpdate,load,get,list,iterate,lock,uniqueResult
		 * 这些方法都会将数据放入缓存
		 * get和load会去一级缓存取
		 * 
		 * */
	}
}
